<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // Set 
    // ES6 提供了新的数据结构 Set。它类似于数组，但是成员的值都是唯一的，没有重复的值。

    // 如何创建Set结构?  => 构造函数创建

    var s = new Set();
    console.log(s);
    // console.log(s.size);


    // Set数据结构的属性和方法

    // 属性:
    // size  返回Set结构成员的个数(元素的个数/数据的条数)

    // 方法
    // add(val)     向Set结构中新增一个成员/元素  => 返回值: Set结构本身,可以接链式操作
    // delete(val)  删除Set结构中的一个成员 (单删)  返回值:删除成功返回true,删除失败返回false
    // clear()      清除Set结构  返回值:undefined
    // has(val)     判断Set结构中是否存在某个成员/元素
    // forEach()    遍历方式

    // 注意: set数据结构没有键名,只有健值,或者也可以说键名健值都是同一个值

    // 加入值类型  => 值类型判断是否存在就用  Object.is()
    // s.add(1);
    // s.add(2);
    // s.add(3);
    // s.add(NaN);
    // s.add(1);
    // s.add(2);
    // s.add(3);
    // s.add(NaN);
    // console.log(s); // [{value:1},{value:2},{value:3}]

    // 加入引用类型 => 判断是否引用同一片内存地址
    // s.add([]);
    // s.add([]);

    // var arr = [];
    // s.add(arr);
    // s.add(arr);
    // console.log(s);


    var arr = [];
    s.add(1).add(2).add(3).add(arr);
    
    // has()
    // console.log(s.has(1));
    // console.log(s.has(2));
    // console.log(s.has(3));
    // console.log(s.has(arr));

    // console.log(s.has(4));
    // console.log(s.has([]));

    // delete()
    // console.log(s.delete(1));
    // console.log(s.delete(2));
    // console.log(s.delete(3));
    // console.log(s.delete(arr));
    // console.log(s.delete(4));
    // console.log(s.delete([]));
    
    // s.clear();
    // console.log(s);


    // forEach()

    s.forEach(function(item,index,set){
        console.log(item,index,set);
    })

    
</script>
</html>